home *** CD-ROM | disk | FTP | other *** search
/ Loadstar 242 / 242.d81 / t.real sounds < prev    next >
Text File  |  2022-08-26  |  8KB  |  284 lines

  1. u
  2.         R E A L   S O U N D S
  3.  
  4.   Sounds edited by William O. Nelson
  5.  
  6.       Text by Jeffrey L. Jones
  7.  
  8.  
  9.     Here we have a collection of
  10. sounds in BASIC that mimic things you
  11. would find in real life. William
  12. Nelson has taken them from the
  13. hundreds of programs he's seen over
  14. the past ten years. Some of these
  15. sounds are amazing, not that they
  16. sound out of this world because
  17. actually they're pretty BASIC (pardon
  18. the double entendre). They're amazing
  19. in that some of them are as short as
  20. one line -- and they [work]! That's
  21. taught me something!
  22.  
  23.     I've worked with sound very
  24. little in my tenure (actually
  25. elevenure) as a Commodore programmer.
  26. That's because I've written very few
  27. games. I did submit a pitiful game
  28. called "Star Guard" way back in 1988.
  29. Fender accepted it, he may have even
  30. paid me for it, but could never bring
  31. himself to publish it. I also added
  32. bleeps and buzzes to JEFF'S TOP TEN,
  33. which ran a couple of times in the
  34. 60-something era of LOADSTAR. Had I
  35. known that adding a sound could be
  36. this simple, my programs would have
  37. had more sound in them all this
  38. time.
  39.  
  40.     None of the sounds have the same
  41. line numbers. None of the sounds
  42. take up more than a screen. If you
  43. have JiffyDOS, all you'll have to do
  44. is enter:
  45.  
  46.   [@d:sound name]
  47.  
  48.  to list the file to the screen and
  49. then just hit RETURN over the lines
  50. to add them to your program. Make
  51. sure your program doesn't have the
  52. same line numbers.
  53.  
  54.  
  55.  IF YOU DON'T HAVE JIFFYDOS
  56.  {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}
  57.  
  58.     If you don't have JiffyDOS, the
  59. easiest way to do it, short of
  60. printing and typing the codes is to
  61. first LOAD the sound and LIST it.
  62. Most of the sounds fit on one screen.
  63. Next move the cursor up to just below
  64. the last line LISTed.  Now LOAD your
  65. program and then hit RETURN over
  66. the sound lines to add them to your
  67. program. Hopefully, none of the
  68. lines have scrolled off the screen.
  69. I did write an appender program which
  70. is on THE COMPLEAT PROGRAMMER that
  71. will append higher numbered programs
  72. to your programs.
  73.  
  74.  
  75.  SOUND AND TIME
  76.  EXCERPTS FROM LOADSTAR LETTER #33
  77.  {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}
  78.  
  79.     If the sound of a tree falling in
  80. the woods lasted for only a 20th of a
  81. second, would anyone hear it?
  82. Probably not.
  83.  
  84.     Einstein said it best, "The amount
  85. of time that a sound resonates is
  86. usually based on a crude FOR-NEXT
  87. loop." Okay, maybe Einstein never said
  88. that, but he understood relativity,
  89. and time is very relative in a
  90. FOR-NEXT loop. Compile or accelerate
  91. that FOR-NEXT loop and it's suddenly
  92. taking much less time to execute. And
  93. when your sounds are perfectly timed
  94. to exist for a certain number of
  95. moments, they become different or even
  96. inappropriate sounds when their gate
  97. (sounding) is shortened. Cut a bell by
  98. four and it becomes a blip. By 20?
  99. Accelerate [and] compile? That may be
  100. more than 400 times faster! Your bell
  101. sound might not even make a click!
  102.  
  103.  
  104.  GETTING THE DELAY YOU WANT
  105.  {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}
  106.  
  107.    TI is a system variable, and it
  108. changes every 60th of a second.
  109. Using it, the obvious way to delay
  110. for a half second is to count off 30
  111. jiffies:
  112.  
  113.  100 TQ = TI
  114.  110 IF TI < TQ+30 THEN 110
  115.  
  116.     Need a quarter second? Test for
  117. less than tq+15. Need 3 seconds? Try
  118. TQ+180.
  119.  
  120.     If more games had lines like these
  121. instead of arbitrary FOR-NEXT loops,
  122. they would run perfectly on all
  123. systems. The above code will wait for
  124. a half second, compiled or uncompiled,
  125. accelerated or unaccelerated, or any
  126. combination thereof -- with any type
  127. of accelerator.
  128.  
  129.     When your perfectly timed sound is
  130. compiled or accelerated, you may run
  131. into timing problems. Fortunately the
  132. average delay loop,
  133.  
  134.        [FOR D= 1 TO 1000:NEXT]
  135.  
  136. isn't sped up much by normal
  137. compiling.  Here's a comparison chart
  138. for the code:
  139.  
  140.  10 A=TI
  141.  20 FORI=1TO2000:NEXT
  142.  30 PRINTTI-A
  143.  
  144.  
  145.  Uncompiled:                124
  146.  Blitz!:                     96
  147.  Abacus Compiler 1 P-code:  116
  148.  Abacus Compiler #1 M-code: 112
  149.  Abacus Compiler #2:P-code:  30
  150.  Abacus Compiler #2:M-code:  30
  151.  
  152.     Note that I had originally tested
  153. a program that counted to 1000, but
  154. realized that on a CMD accelerated
  155. system with Abacus compiler #2, less
  156. than one jiffy would accumulate. Since
  157. we need at least one jiffy for testing
  158. purposes, I doubled all the numbers.
  159.  
  160.     Given that it will always take a
  161. normal C-64 124 jiffies to count to
  162. 2000, we can use the loop as a test
  163. during program setup and come up with
  164. a factor, [F], with which we can
  165. equalize all subsequent delay loops.
  166.  
  167.     For instance if we're running a
  168. Blitz! compiled program on a CMD 20MHZ
  169. accelerated system, the loop will
  170. probably take 96/20 or 4.8 jiffies (we
  171. don't have the accelerator yet). I'm
  172. dividing by 20 since the accelerated
  173. program will run 20 times faster. In
  174. our test loop, it will probably come
  175. out to 4 jiffies even. Since our
  176. standard is 124 jiffies for this loop,
  177. we take 124 and divide it by 4 and
  178. come up with a factor of 31. So all
  179. delay loops in that compiled and
  180. accelerated program should be
  181. multiplied by a factor of 31. Here is
  182. how the factor routine would look:
  183.  
  184.  3000 F = TI
  185.  3010 FORI=1TO2000:NEXT
  186.  3020 F = TI - F
  187.  3030 IF F = TI THEN F = 1 : RETURN
  188.  3040 F = 124 / F : RETURN
  189.  
  190.     Line 3030 exists because the jiffy
  191. clock might be off for some reason --
  192. you may have previously disabled the
  193. STOP key with POKE 788,52. In that
  194. case, you can't know how many jiffies
  195. have passed so your factor will have
  196. to be one. I suggest enabling the STOP
  197. key with POKE 788,49 during the test.
  198.  
  199.     Now that F is defined, we can
  200. insert it in all FOR-NEXT type delay
  201. loops:
  202.  
  203.         FOR I=1 TO 500*F:NEXT
  204.  
  205. will run at roughly the same speed,
  206. compiled or uncompiled, accelerated or
  207. unaccelerated, or any combination
  208. thereof. Even if your C-64 were
  209. running a little slow for some reason,
  210. the delay would be the same.
  211.  
  212.  
  213.  FINAL NOTES
  214.  {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}
  215.  
  216.     You can apply this scheme to the
  217. sounds supplied under this heading if
  218. you choose. I didn't include a
  219. factor in the routines since it would
  220. make all delays nil unless you first
  221. define F as 1 and I didn't want to
  222. lock you into it. That would make me
  223. a bit overbearing, wouldn't it? But
  224. we do ask that you use such a scheme
  225. if you submit a program with sound to
  226. LOADSTAR. We do want our programs to
  227. work satisfactorily on all systems.
  228.  
  229.  
  230.  [FENDER'S POSTMUMBLE:] At first I
  231. asked Jeff to convert all of the delay
  232. loops from the FOR-NEXT format to the
  233. TQ=TI format, but then he brought up
  234. the fact that if the STOP key had been
  235. disabled by POKEing 788 the TQ=TI
  236. method won't work -- unless you
  237. re-enable the STOP key right before
  238. the delay and then disable it again
  239. right after.
  240.  
  241.  But I wanted to see how much work was
  242. involved, so I converted the first
  243. three sounds. It wasn't hard.
  244.  
  245.  This accelerator/STOP key problem is
  246. typical in programming. Everything has
  247. a DOWN side as well as an UP side.
  248. This is the problem in a nutshell. If
  249. you:
  250.  
  251.  POKE788,52 to disable the STOP key,
  252. the TQ=TI method won't work.
  253.  
  254.  POKE808,239 to disable the STOP key,
  255. BSAVEing and BLOADing might not work.
  256.  
  257.  Use FOR-NEXT delay loops, your
  258. program won't work right on an
  259. accellerated system.
  260.  
  261.  In my opinion, the TQ=TI method is
  262. best for delay loops and as for
  263. disabling the STOP key, I'm coming
  264. around to Jeff's opinion that the STOP
  265. key doesn't have to be disabled. I
  266. have to admit it's been years since I
  267. accidentally hit the STOP key. And
  268. anyway, all you probably have to do is
  269. enter CONT:REM and the program will
  270. continue.
  271.  
  272.  I guess at the bottom of my thinking
  273. is: how many programs are so important
  274. that an accidental STOP should cause
  275. dismay? I work on Commodore programs
  276. all day long five days a week and if
  277. occasional blips caused me as much
  278. concern as they seem to cause some
  279. people I'd figure it's time to look
  280. into some other way of making a
  281. living.
  282.  
  283.  FT
  284.  
  285.